#include "Clases.h"
#include <QtGlobal>
#include <ctime>
#include <stdio.h>

void Jugador::inicializar(int nEj, QString n, QColor c){
    nEjercitos=nEj;
    nCartas=-1;
    nombre=n;
    color=c;
    jugando=true;
    asigno=false;
}

void Jugador::recibirCarta(int carta){
    cartas[++nCartas]=carta;
}

int Jugador::canjearCarta(int posCarta){
    int carta=cartas[posCarta];
    printf("Carta devuelta: %i\n",carta);
    for(int i=posCarta;i<=nCartas-1;i++)
        cartas[i]=cartas[i+1];
    nCartas--;
    return carta;
}

void Territorio::inicializar(int nTerritorio){
    nJugador=-1;
    nEjercitos=0;
    nombre=nombreTerritorio[nTerritorio];
    for(int n=0;n<5;n++)
        listaVecinos[n]=vecinos[nTerritorio][n];
}

bool Territorio::esVecino(int nTerritorio){
    for(int i=0; i < 6; i++){
        int vecino = listaVecinos[i]-1;
        if(vecino==nTerritorio) return true;
    }
    return false;
}

bool Territorio::asignar(int codJug, Jugador *jug){
    printf ("Asignar::nEj:%i nJug:%i\n", jug[codJug].nEjercitos, nJugador);
    if (jug[codJug].nEjercitos <= 0) return false;
    if (jug[codJug].asigno) return false;
    
    if (nJugador == -1){
        nJugador = codJug;
        nEjercitos = 1;
        jug[codJug].nEjercitos--;
        jug[codJug].asigno=true;
        color = jug[codJug].color;
    }else if (nJugador == codJug){
        nEjercitos++;
        jug[codJug].nEjercitos--;
        jug[codJug].asigno=true;
    }else 
        return false;
    
    return true;
}

bool Territorio::ocupar(int codJug, Jugador *jug){
    printf ("Ocupar::nEj:%i nJug:%i\n", jug[codJug].nEjercitos, nJugador);
    // En teoria esto nunca deberia pasar sin embargo validamos
    if (jug[codJug].nEjercitos <= 0) return false;
    
    if (nJugador == codJug){
        nEjercitos++;
        jug[codJug].nEjercitos--;
    }else 
        return false;
    
    return true;
}

void Territorio::conquistar(int codJug, QColor c){
    nJugador = codJug;
    color = c;
}

Mazo::Mazo(){
    nCartas=43;
    for(int i=1;i<=nCartas;i++)
        mazo[i]=i;
    barajar();
}

int Mazo::obtenerCarta(){
    int carta;
    if(nCartas==-1)
        carta=-1;
    else
        carta=mazo[nCartas--];
    return carta;
}

void Mazo::devolverCarta(int carta){
    mazo[++nCartas]=carta;
    barajar();
}

void Mazo::barajar(){
    int n;
    bool yaExiste;
    qsrand((unsigned)time(0));
    for(int i=0;i<=nCartas;i++){
        do{
            n=qrand() % 44;
            yaExiste=false;
            for(int j=0;j<i;j++)
                if(mazo[j]==n){
                    yaExiste=true;
                    break;
                }
        }while(yaExiste);
        mazo[i]=n;
    }
}
